iT邦幫忙

2025 iThome 鐵人賽

DAY 4
1
Software Development

30 天的 .Net gRPC 迷途系列 第 4

Day4 建立基本 gRPC Server 服務

  • 分享至 

  • xImage
  •  

這篇介紹利用 .Net VS 2022 的專案範本建立 gRPC 的服務

專案的名稱設定為 MyGrpcServer,接著就會看到以下的內容

往裡面看會有一個 .proto 檔的範例跟結構描述

// proto 版本,現行都使用第三版
syntax = "proto3";

// 提供 c# 使用的 namespace
option csharp_namespace = "MyGrpcServer";

package greet;

// 定義服務的宣告名稱
service Greeter {
  // 定義服務裡面的方法,Request/Response 物件
	rpc SayHello (HelloRequest) returns (HelloReply);
}

// Message 格式,屬性使用駝峰式。在 c# 那邊會自動轉成大駝峰開始
message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

以上就是一個簡易的 .Net gRPC 的專案範本,跟一個 .proto 檔宣告的範例

裡面可以看到三個東西要比較注意,假如沒有特殊的命名習慣。建議就參考範本的方式跟著命名,避免會有找不到或其他錯誤的發生。


// c# 編譯出來的 namespace 使用
option csharp_namespace = "MyGrpcServer";

// 若無上面的 option csharp_namespace, 會改用這個屬性當預設的 namespace
// 網路上查詢,在別的語言會使用到。
package greet;

// 實作的服務名稱
service Greeter {}

接著往 Services → GreeterService.cs 看裡面內容,以下解說一下

using Grpc.Core;

namespace MyGrpcServer.Services
{
    // Greeter.GreeterBase 會跟著 service 宣告的名稱
    public class GreeterService(ILogger<GreeterService> logger) : Greeter.GreeterBase
    {
        // request、response 物件會在 MyGrpcServer 這個 namespace 下
        public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            logger.LogInformation("The message is received from {Name}", request.Name);

            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + request.Name
            });
        }
    }
}

以上就是 gRPC Server 端的實作


上一篇
Day3 gRPC 欄位屬性介紹
下一篇
Day5 建立基本 gRPC Client 端
系列文
30 天的 .Net gRPC 迷途9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言